"""
7. 整数反转
给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
假设环境不允许存储 64 位整数（有符号或无符号）。
 
示例 1：
输入：x = 123
输出：321
示例 2：
输入：x = -123
输出：-321
示例 3：
输入：x = 120
输出：21
示例 4：
输入：x = 0
输出：0
"""

def reverse(x:int) -> int:
    """
    :type x: int
    :rtype: int
    """
    if abs(x) < 10:
        return x
    
    flag = ""
    if x < 0 : flag = "-"
    x = abs(x)
    x_str = str(x)
    # 字符串反转 使用Python切片特性[::-1]实现高效反转：
    x_str = x_str[::-1]
    x = int(flag + x_str)

    return x if -2**31 <= x <= 2**31 - 1 else 0

# 纯数学解法
def reverse_shuxu(x: int) -> int:
    res, sign = 0, 1
    if x < 0 : sign = -1
    x = abs(x)
    while x:
        res = res *10 + x % 10
        x //= 10

    res *= sign
    return res if -2**31 <= res <= 2** 31 -1 else 0

if __name__ == '__main__':
    x = -123
    print(reverse(x))

    print(reverse_shuxu(-4121))
